############################################################################################
#                              Fonctions de gestion des Livres                             #
############################################################################################

# Requête permettant d'emprunter un livre
sub borrowBook {
  my $req = $dbd->prepare("INSERT INTO emprunt (ISBN, idAdherent, dateEmprunt, dateRetour) VALUES ('$_[0]', '$_[1]', CURRENT_DATE, ADDDATE(CURDATE(), INTERVAL 15 DAY));");
  $req->execute;
  $req->finish;
  $req = $dbd->prepare("UPDATE livre SET livre.empruntable = 0 WHERE livre.ISBN = $_[0];");
  $req->execute;
  $req->finish;
}

sub borrowable {
  my $hashBook = $dbd->selectall_arrayref("SELECT empruntable FROM livre WHERE ISBN = '$_[0]';");
  return $$hashBook[0][0];
}

# Requête permettant d'ajouter un livre
sub addBook{#(titre,nomauteur,prenomauteur,éditeur,numero,date,prix)

  addPerson($_[1],$_[2]);
  
  my $req = $dbd->prepare("INSERT INTO livre (titre,ISBN,prixAchat,dateAchat,empruntable) VALUES ('$_[0]', '$_[4]', '$_[6]', str_to_date('$_[5]','%d/%m/%Y'), '$_[7]');");
  $req->execute;
  $req->finish;
  
  my $id = selectPerson($_[1],$_[2]);

  $req = $dbd->prepare("INSERT INTO ecriture (ISBN,idPersonne) VALUES ('$_[4]','$id');");
  $req->execute;
  $req->finish;

  $req = $dbd->prepare("INSERT INTO editeur (nomEditeur) VALUES ('$_[3]');");
  $req->execute;
  $req->finish;

  my $hashEditor = $dbd->selectall_arrayref("SELECT MAX(idEditeur) FROM editeur WHERE nomEditeur = '$_[3]';");
  my $idEditor = $$hashEditor[0][0];

  $req = $dbd->prepare("INSERT INTO edite (ISBN,idEditeur) VALUES ($_[4],$idEditor);");
  $req->execute;
  $req->finish;
}

# Requête permettant d'ajouter un livre
sub deleteBook{
  my $req = <<"SQL";
    DELETE FROM livre, ecriture, edite 
       USING livre, ecriture, edite
       WHERE livre.ISBN = '$_[0]' 
       AND ecriture.ISBN = '$_[0]'
       AND edite.ISBN = '$_[0]';
SQL
  my $prep = $dbd->prepare($req);
  $prep->execute;
  $prep->finish;
}

# Requête permettant de rechercher des livres
sub searchBook{#(titre,nomAuteur, prenomAuteur, éditeur,numero,date,prix,empruntable)
  my @quotedArgs;
  my $i=0;
  foreach my $arg (@_) {
    $quotedArgs[$i++]=quotemeta($arg);
  }

  my $date = convertDate($_[5]) . '%';

  my $req;
  if($_[7] != 2){
  $req = <<"SQL";
    SELECT * from livre, personne, ecriture, editeur, edite 
        where livre.ISBN like '%$quotedArgs[4]%'
        and livre.titre like '%$quotedArgs[0]%'
        and livre.prixAchat like '%$quotedArgs[6]%'
        and livre.dateAchat like '$date'
        and livre.empruntable = '$_[7]'
        and ecriture.ISBN = livre.ISBN
        and ecriture.idPersonne = personne.idPersonne
        and personne.nomPersonne like '%$quotedArgs[1]%'
        and personne.prenomPersonne like '%$quotedArgs[2]%'
        and edite.ISBN = livre.ISBN
        and edite.idEditeur = editeur.idEditeur
        and editeur.nomEditeur like '%$quotedArgs[3]%'
        order by livre.titre;
SQL
  }
  else{
  $req = <<"SQL";
    SELECT * from livre, personne, ecriture, editeur, edite 
        where livre.ISBN like '%$quotedArgs[4]%'
        and livre.titre like '%$quotedArgs[0]%'
        and livre.prixAchat like '%$quotedArgs[6]%'
        and livre.dateAchat like '$date'
        and ecriture.ISBN = livre.ISBN
        and ecriture.idPersonne = personne.idPersonne
        and personne.nomPersonne like '%$quotedArgs[1]%'
        and personne.prenomPersonne like '%$quotedArgs[2]%'
        and edite.ISBN = livre.ISBN
        and edite.idEditeur = editeur.idEditeur
        and editeur.nomEditeur like '%$quotedArgs[3]%'
        order by livre.titre;
SQL
  }
  my $hashMembers = $dbd->selectall_hashref($req, 'ISBN');
  return $hashMembers;
}

# Requête permettant de mettre à jour un livre
sub updateBook {#(titre,nomAuteur, prenomAuteur, éditeur,numero,date,prix)
  my @quotedArgs;
  my $i=0;
  foreach my $arg (@_) {
    $quotedArgs[$i++]=quotemeta($arg);
  }
 
  my $date = convertDate($_[5]);
  my $req = <<"SQL";
    UPDATE livre,ecriture,personne, edite, editeur
        SET livre.titre = '$quotedArgs[0]', 
            personne.nomPersonne = '$quotedArgs[1]',
            personne.prenomPersonne = '$quotedArgs[2]', 
            editeur.nomEditeur = '$quotedArgs[3]', 
            livre.dateAchat = '$date',
            livre.prixAchat = '$_[6]',
            livre.empruntable = '$_[7]'
        WHERE livre.ISBN = '$quotedArgs[4]'
          and ecriture.ISBN = livre.ISBN
          and ecriture.idPersonne = personne.idPersonne
          and edite.ISBN = livre.ISBN
          and edite.idEditeur = editeur.idEditeur;
SQL
  my $prep = $dbd->prepare($req);
  $prep->execute;
  $prep->finish;
}

# Requête permettant de rechercher les emprunteurs pour un livre donné
sub borrowerOfBook{
  my $req;
  if($_[1] ne ""){
    $req = <<"SQL";
    SELECT * from adherent, eleve, personne, emprunt
        WHERE emprunt.ISBN = '$_[0]'
          AND emprunt.idAdherent = '$_[1]'
          AND adherent.idAdherent = emprunt.idAdherent
          AND eleve.login = adherent.login
          AND personne.idPersonne = eleve.idPersonne;
SQL
  }
  else{
    $req = <<"SQL";
    SELECT * from adherent, eleve, personne, emprunt
        WHERE emprunt.ISBN = '$_[0]'
          AND adherent.idAdherent = emprunt.idAdherent
          AND eleve.login = adherent.login
          AND personne.idPersonne = eleve.idPersonne;
SQL
  }
  my $hashMembers = $dbd->selectall_hashref($req, 'idAdherent');
  return $hashMembers;
}

# Requête permettant de mettre à jour un emprunt
sub updateBorrower{
  my $dateEmprunt = convertDate($_[2]);
  my $dateRetour = convertDate($_[3]);
  my $req = <<"SQL";
    UPDATE emprunt
        SET dateEmprunt = '$dateEmprunt',
            dateRetour = '$dateRetour'
        WHERE ISBN = '$_[0]'
          and idAdherent = '$_[1]';
SQL
  my $prep = $dbd->prepare($req);
  $prep->execute;
  $prep->finish;
}

# Requête permettant d'annuler un emprunt
sub deleteBorrower{
  my $req = <<"SQL";
  DELETE FROM emprunt
    WHERE ISBN = '$_[0]' 
    AND idAdherent = '$_[1]';
SQL
  my $prep = $dbd->prepare($req);
  $prep->execute;
  $prep->finish;
}

1;
